Perlin Noise
https://gyazo.com/c434389e8cc848edb08089bd7198f477
基本的な流れ
座標系を座標系に直交な格子状のセルに分ける
https://gyazo.com/d6decd9e0ebe505c94947eb614701709
各セルの角にランダムな方向ベクトルを生成する
https://gyazo.com/cd16f3ac4246bc16990c881fa6f20f62
原文ではここのベクトルの作り方にすごい癖がある
各ピクセル、4つの角に対して、角からの相対座標で、ベクトルの向きとの内積を取る https://gyazo.com/a6c1bbc95a513b44bd8f39f8538f0397
https://gyazo.com/d86c515d24f23993a6501a4f2e9a2c6f
2回微分取るときたないし、アーティファクトも出ていた
ランダム
Perlinの論文によると、各頂点に生成する方向ベクトルは、以下の12通りらしい:
code:plain
( 1, 1, 0), (-1, 1, 0), ( 1, -1, 0), (-1, -1, 0)
( 1, 0, 1), (-1, 0, 1), ( 1, 0, -1), (-1, 0, -1)
( 0, 1, 1), ( 0, -1, 1), ( 0, 1, -1), ( 0, -1, -1)
Permutation Tableをルックアップしてこの12のうちのいずれかを指定している
まあ2002年当時のパフォーマンスに最適化した結果だと思うので、今更そんなに気にしなくてもいいんじゃないですかね
GLSL
3次元を出す
https://gyazo.com/27e5c205fd7dfe4c23a213c0fb830073
各セルごとの方向と内積を取るところ、方向を3つ mat3 にまとめた上で、行列とベクトルの掛け算をすると、サクッと3方向との内積が計算できて便利